package com.itheima.demo4;

public class Demo1 {
    /*
    利用多态语法,将方法参数设置为父型
    未来调用方法就可以接受任意子类对象
    好处: 大大提升了程序的扩展性.延展性
    -------------------------------------
    多态弊端:
    由于多态语法强制规定编译看父类,所以使用多态语法接收的对象
    不能直接访问子类特有的成员!降低了灵活性
    解决方案:
    通过多态的向下转换来解决
        1. 向上转换(自动类型转换) --多态默认格式
        2. 向下转换((强制类型转换) --左子右父
     */
    public static void main(String[] args) {
        AnimalOperator operator = new AnimalOperator();
        operator.useAnimal(new Dog());

        //多态: 父类应用指向子类对象
        Animal animal = new Dog();
        //向下转型(强制类型转换) --左子右父
        Dog dog =(Dog)animal;
        //多态语法下,成员的访问特点: 编译看左边(父类)
        dog.lookHome();

        //规避风险: 通过instanceof关键字解决
        if (animal instanceof Dog){
            Dog dog1 =(Dog)animal;
            dog1.lookHome();
        }

    }
}
